/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.unesp.rc.locadora.beans;

import br.unesp.rc.locadora.utils.MySQLUtil;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.*;

/**
 * Esta é a classe Pessoa.
 * @author aluno
 */
@Entity
@Table(name=MySQLUtil.TB_PESSOA)
@Inheritance(strategy=InheritanceType.JOINED)
public class Pessoa {

    private long idPessoa;
    private String nome;
    private Date dataNascimento;
    /**
     * Este atributo representa um relacionamento 
     * unidirecional (1:1) de Pessoa para Contato
     */
    private Contato contato;
    /**
     * Este atributo representa:<br>
     * <b>Relacionamento:</b> 1 : 1<br> 
     * <b>Tipo: </b> unidirecional<br>
     * <b>Fluxo: </b>de Pessoa para Contato
     */
    private Acesso acesso;
    /**
     * Este atributo representa um relacionamento 
     * unidirecional (1:1) de Pessoa para Endereco
     */
    private Endereco endereco;
    
    /**
     * Este atributo representa um relacionamento
     * bidirecional (1:*) de Pessoa para Locacao
     */
    private List<Locacao> locacao = new ArrayList<Locacao>();

    public Pessoa() {
    }

    public Pessoa(String nome, Date dataNascimento) {
        this.nome = nome;
        this.dataNascimento = dataNascimento;
    }

    @Column(name=MySQLUtil.COL_PESSOA_NOME)
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    @Column(name=MySQLUtil.COL_PESSOA_DATANASC)
    @Temporal(javax.persistence.TemporalType.DATE)
    public Date getDataNascimento() {
        return dataNascimento;
    }

    public void setDataNascimento(Date dataNascimento) {
        this.dataNascimento = dataNascimento;
    }

    @OneToOne
    @JoinColumn(name=MySQLUtil.COL_PESSOA_ID,referencedColumnName=MySQLUtil.COL_CONTATO_IDPESSOA)
    public Contato getContato() {
        return contato;
    }

    public void setContato(Contato contato) {
        this.contato = contato;
    }

    /**
     * @return the acesso
     */
    @OneToOne
    @JoinColumn(name=MySQLUtil.COL_PESSOA_ID,referencedColumnName=MySQLUtil.COL_ACESSO_IDPESSOA)
    public Acesso getAcesso() {
        return acesso;
    }

    /**
     * @param acesso the acesso to set
     */
    public void setAcesso(Acesso acesso) {
        this.acesso = acesso;
    }

    /**
     * @return the endereco
     */
    @OneToOne
    @JoinColumn(name=MySQLUtil.COL_PESSOA_ID,referencedColumnName=MySQLUtil.COL_ENDERECO_IDPESSOA)
    public Endereco getEndereco() {
        return endereco;
    }

    /**
     * @param endereco the endereco to set
     */
    public void setEndereco(Endereco endereco) {
        this.endereco = endereco;
    }

    /**
     * @return the locacao
     */
    @OneToMany
    public List<Locacao> getLocacao() {
        return locacao;
    }

    /**
     * @param locacao the locacao to set
     */
    public void setLocacao(List<Locacao> locacao) {
        this.locacao = locacao;
    }
    
    public void setLocacao(Locacao loc) {
        this.locacao.add(loc);
    }

    /**
     * @return the idPessoa
     */
    @Id
    @GeneratedValue
    @Column(name=MySQLUtil.COL_PESSOA_ID)
    public long getIdPessoa() {
        return idPessoa;
    }

    /**
     * @param idPessoa the idPessoa to set
     */
    public void setIdPessoa(long idPessoa) {
        this.idPessoa = idPessoa;
    }
}
